﻿using System.Collections.Generic;

#pragma warning disable 1591 // TODO CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member'

namespace Fizzler.Model
{
    public interface ISimpleSelector { }
    public interface ISimpleSelectorChainPrimary : ISimpleSelector { }
    public interface ISimpleSelectorChainSecondary : ISimpleSelector { }
    public interface ISimpleSelectorChain
    {
        ISimpleSelectorChainPrimary Primary { get; }
        IEnumerable<ISimpleSelectorChainSecondary> Secondaries { get; }
    }
    public interface ICombinator
    {
        ISimpleSelectorChain Left { get; }
        ISimpleSelectorChain Right { get; }
    }
    public interface ISelectorGroup : IEnumerable<ISimpleSelectorChain> { }
    public interface IUniversalSelector : ISimpleSelectorChainPrimary { }
    public interface ITypeSelector : ISimpleSelectorChainPrimary
    {
        string Type { get; }
    }
    public interface IIdSelector : ISimpleSelectorChainSecondary
    {
        string Id { get; }
    }
    public interface IClassSelector : ISimpleSelectorChainSecondary
    {
        string Class { get; }
    }
    public interface IAttributeSelector : ISimpleSelectorChainSecondary
    {
        string Name { get; }
        string Value { get; }
    }
    public interface IAttributeDefinedSelector : IAttributeSelector { }
    public interface IAttributeExactSelector : IAttributeSelector { }
    public interface IAttributeWordSelector : IAttributeSelector { }
    public interface IAttributeDashSelector : IAttributeSelector { }
    public interface IAttributePrefixSelector : IAttributeSelector { }
    public interface IAttributeSuffixSelector : IAttributeSelector { }
    public interface IAttributeSubstringSelector : IAttributeSelector { }
    
    public interface IPseudoClassSelector : ISimpleSelectorChainSecondary { }
    public interface IFirstChildSelector : IPseudoClassSelector { }
    public interface ILastChildSelector : IPseudoClassSelector { }
    public interface IOnlyChildSelector : IPseudoClassSelector { }
    public interface INthSelector : IPseudoClassSelector
    {
        int N { get; }
        int B { get; }
    }
    public interface INthChildSelector : INthSelector { }
    public interface IEmptySelector : IPseudoClassSelector { }
    public interface INegationSelector : IPseudoClassSelector
    {
        ISimpleSelector Selector { get; }
    }

    public interface IChildCombinator : ICombinator { }
    public interface IDescendantCombinator : ICombinator { }
    public interface IAdjacentSiblingCombinator : ICombinator { }
    public interface IGeneralSiblingCombinator : ICombinator { }
}
